# Python自定义异常

"""
Python自定义异常的主要内容：
1. 如何自定义异常类
2. 使用raise引发异常
3. 带参数的异常定义
"""

print("="*50)
print("Python自定义异常示例")
print("="*50)

# 1. 自定义简单异常类
class MyError(Exception):
    """这是一个简单的自定义异常类"""
    pass

# 2. 带参数的自定义异常类
class PriceError(Exception):
    """自定义的价格异常，用于处理商品价格相关的错误"""
    def __init__(self, price, message="商品价格不合法"):
        self.price = price
        self.message = message
        super().__init__(self.message)

# 3. 使用示例
print("\n1. 简单异常示例")
print("-"*40)
try:
    score = -5
    if score < 0:
        # 使用raise引发自定义异常
        raise MyError("分数不能为负数！")
except MyError as e:
    print(f"捕获自定义异常：{e}")

print("\n2. 带参数异常示例")
print("-"*40)

def check_price(price):
    """检查商品价格是否合法"""
    if price < 0:
        # 引发带参数的异常
        raise PriceError(price, f"商品价格 {price} 不能为负数")
    elif price > 10000:
        # 只传入必要的参数，错误信息由异常类内部处理
        raise PriceError(price)
    print(f"商品价格 {price} 合法")

# 测试带参数的异常
try:
    # 测试负数价格
    check_price(-100)
except PriceError as e:
    print(f"价格错误：{e.message}")
    print(f"错误的价格值：{e.price}")

try:
    # 测试超出限额的价格
    check_price(20000)
except PriceError as e:
    print(f"价格错误：{e.message}")
    print(f"错误的价格值：{e.price}")

try:
    # 测试正常价格
    check_price(99.9)
except PriceError as e:
    print(f"价格错误：{e.message}")
    print(f"错误的价格值：{e.price}")